package com.ybkj.o2o.mc.manager;


import com.ybkj.o2o.mc.common.DataGrid;
import com.ybkj.o2o.mc.common.query.EnterpriseQuery;
import com.ybkj.o2o.mc.entity.Enterprise;
import com.ybkj.o2o.mc.entity.Passenger;
import com.ybkj.o2o.mc.entity.PassengerAccount;

import java.util.List;

/**
 * Created by shine on 15/8/19.
 */
public interface EnterpriseManager {
  /**
   * 判断企业名称是否存在.
   *
   * @param name   企业名称
   * @param appKey 系统key
 * @param companyId 
   * @return true存在, false不存在
   */
  boolean exists(String name, String appKey, Long companyId);

  /**
   * 保存企业基本信息.
   *
   * @param enterprise 企业信息
   * @return 企业信息
   */
  Enterprise insert(Enterprise enterprise);

  /**
   * 保存企业乘客信息.
   *
   * @param passengerList 乘客列表
   * @param enterprise    企业信息
   * @return 受影响行数
   */
  int batchInsert(List<Passenger> passengerList, Enterprise enterprise);

  /**
   * 更新企业下的乘客信息.
   *
   * @param passengerList 乘客列表
   * @param enterprise    企业信息
   * @return 受影响行数
   */
  int updatePassengers(List<Passenger> passengerList, Enterprise enterprise);

  /**
   * 根据主键和系统key查询企业信息.
   *
   * @param enterpriseId 企业主键
   * @param appKey       系统key
   * @return 企业信息
   */
  Enterprise findOne(Long enterpriseId, String appKey);

  /**
   * 根据主键修改企业基本信息.
   *
   * @param enterprise 企业信息
   * @return 受影响行数
   */
  int update(Enterprise enterprise);

  /**
   * 删除指定企业信息.
   *
   * @param enterpriseId 企业主键
   * @param appKey       系统key
   * @return 删除的数量
   */
  int deleteEnterprise(Long enterpriseId, String appKey);

  /**
   * 根据主键和系统Key查询企业信息.
   *
   * @param enterpriseId 企业主键
   * @param appKey       系统key
   * @return 企业信息
   */
  Enterprise findByIdAndAppKey(Long enterpriseId, String appKey);

  /**
   * 企业账户充值.
   *
   * @param enterprise     企业信息
   * @param account        充值记录
   * @param updateBlance   是否修改余额
   * @param useNoDrawMoney 使用不可提现金额
   * @return 充值记录明细
   */
  PassengerAccount updateAccount(Enterprise enterprise, PassengerAccount account,
                                 boolean updateBlance, boolean useNoDrawMoney);

  /**
   * 企业账户修改不可提现金额.
   *
   * @param enterprise   企业信息
   * @param account      账户明细记录
   * @param updateBlance 是否修改余额
   * @return 账户明细记录
   */
  PassengerAccount accountNoDrawMoney(Enterprise enterprise, PassengerAccount account,
                                      boolean updateBlance);

  /**
   * 分页根据条件查询企业信息.
   *
   * @param enterpriseQuery 查询条件
   */
  DataGrid<Enterprise> findByEnterpriseQuery(EnterpriseQuery enterpriseQuery);

  /**
   * 分页查询企业所属的乘客信息.
   *
   * @param enterpriseId 企业主键
   * @param page         页码
   * @param rows         每页显示数量
   */
  DataGrid<Passenger> findEnterprisePassenger(Long enterpriseId, int page, int rows);


  /**
   * 根据主键查询企业信息.
   *
   * @param id 企业主键
   * @return 企业信息
   */
  Enterprise fetch(Long id);

  int updateCompanyName(Long companyId,String abbreviation, String appKey);

  int disposeGrade(Long gradeId, String gradeName, Long companyId, String appKey);
}
